////============================================================================
//// Name        : tpodd.cpp
//// Author      : Emmanuel
//// Version     :
//// Copyright   : Your copyright notice
//// Description : Hello World in C++, ANSI-style
////============================================================================
//
//
//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//#include <iostream>
//#include <string.h>
//#include <stddef.h>
//#include <iostream>
//#include <time.h>
//#include "ArbolB+/ArbolBMas.h"
//#include "ArbolB+/Estructuras/Registro.h"
//#include "ArbolB+/Estructuras/Clave.h"
//#include "IndexarDiccionario/DictionaryManager.h"
//#include "IndexarDiccionario/Indexador.h"
//#include "IndexarDiccionario/Sort.h"
//#include "CSV/FrasesFile.h"
//#include "Comunes/Directorio.h"
//#include "Comunes/Constantes.h"
//#include "Comunes/RecordFrase.h"
//#include "Hash/Hash.h"
//#include "ProcesadordeTareas.h"
//
//
//using namespace std;
//using namespace dictionary;
//using namespace indexador;
//using namespace ordenamiento;
//
///*usado para sacarle al diccionario que encontramos los caracteres invalidos */
//int sacar_caracteres_del_diccionario(){
//	ArchivoDeTexto * diccionario = new ArchivoDeTexto("diccionario.txt", R);
//	ArchivoDeTexto * nuevodicc = new ArchivoDeTexto("diccionario_nuevo.txt", W);
//	string linea = "";
//	while(!diccionario->is_EOF()){
//		char caracter = '/';
//		linea = diccionario->obtenerLinea();
//		Palabra::remove_character_to_end(caracter, linea);
//		nuevodicc->escribirLinea(linea);
//	}
//
//	return 0;
//}
//
//void borrarDirectorios(){
//	Directorio::borrar_directorio("TEST/" + DIR_DICC);
//	Directorio::borrar_directorio("TEST/" + DIR_HASH);
//	Directorio::borrar_directorio("TEST/" + DIR_ARBOL);
//}
//
//void crearDirectorios(){
//
//	Directorio::crear_carpeta("TEST", DIR_DICC);
//	Directorio::crear_carpeta("TEST", DIR_HASH);
//	Directorio::crear_carpeta("TEST", DIR_ARBOL);
//
////	Directorio::crear_carpeta("", DIR_DICC);
////	Directorio::crear_carpeta("", DIR_HASH);
////	Directorio::crear_carpeta("", DIR_ARBOL);
//}
//
//
//int testArbol(){
//
//	ArchivoBinario * file = new ArchivoBinario("DEFAULT_ARBOL/diccionario_indexado_ordenado.bin", R);
//
//	int offset = 0;
//	string id_termino = "";
//	string termino = "";
//
//	Registro* reg = NULL;
//
//	ArbolBMas* arbolito = new ArbolBMas("DEFAULT_ARBOL/ARBOLBMAS/Diccionario_en_Arbol", 16);
//
//	while(!file->is_EOF()){
//
//		id_termino = file->obtenerLinea();
//		termino = id_termino.substr(9, id_termino.length() - 1);
//		reg = new Registro(new Clave(termino),offset);
//		arbolito->insertar(reg);
//		offset++;
//		delete reg;
//		cout << "registro " << offset <<endl;
//	}
//
//	arbolito->MostrarArbol();
//	arbolito->EscribirListadoOrdenado();
//	return 0;
//}
//
//int testHash() {
//	Random random(150);
//	vector<int> claves_guardadas;
//	Hash hash("TEST/");
//	FrasesFile * file = new FrasesFile("TEST/Frases_Celebres.txt");
//	RecordFrase * record = NULL;
//	while(!file->is_EOF()){
//		record = file->leer_registro();
//		hash.insertar_registro(*record);
//		claves_guardadas.push_back((int)(record->getId()));
//	}
//	cout << "###################HASH##################" << endl;
//	hash.show();
//
////	cout << "INSERTAR CLAVE DUPLICADA" << endl;
////	cout << "========================" << endl;
////	try{
////		RecordFrase reg1(11111, "romina", "casal", "emmanuel hace el informe jajaja");
////		RecordFrase reg2(11111, "emmanuel", "lucero", "soy un menso");
////		hash.insertar_registro(reg1);
////		hash.insertar_registro(reg2);
////	}catch(RecordDuplicatedException &e){
////		cout << "arrojo exception clave duplicada" << endl;
////	}
//
////	cout << "###############  PRUEBAS  ###############" << endl;
////	cout << endl;
////	cout << "BUSCAR CLAVES EXISTENTES" << endl;
////	cout << "========================" << endl;
////
////	for (int i = 0; i < 20; i++){
////		int clave = claves_guardadas.at(random.get_valor());
////		RecordFrase rec = hash.obtener_registro(clave);
////		cout << "buscado: " << clave << " => "<< rec.toString() << endl;
////	}
////
////	Random random2(5000);
////
////	cout << endl;
////	cout << "BUSCAR CLAVES ALEATORIAS" << endl;
////	cout << "========================" << endl;
////	for (int i = 0; i < 20; i++){
////		int clave = random.get_valor();
////		try{
////			RecordFrase rec = hash.obtener_registro(clave);
////			cout << "buscado: " << clave << " => "<< rec.toString() << endl;
////		}catch(RecordNotFoundException &e){
////			cout << "buscado: " << clave << " => "<<  e.what() << endl;
////		}
////	}
////
////	cout << endl;
////	cout << "ELIMINAR REGISTROS" << endl;
////	cout << "==================" << endl;
////	for (int i = 0; i < 20; i++){
////		int clave = random.get_valor();
////		try{
////			RecordFrase rec = hash.obtener_registro(clave);
////			cout << "ENCONTRADO: " << clave << " => "<< rec.toString() << endl;
////			hash.borrar_registro(clave);
////			hash.obtener_registro(clave);
////		}catch(RecordNotFoundException &e){
////			cout << "NO ENCONTRADO: " << clave << " => "<<  e.what() << endl;
////		}
////	}
////
////	cout << endl;
////	cout << "MODIFICAR REGISTROS" << endl;
////	cout << "===================" << endl;
////	for (int i = 0; i < 30; i++){
////		int clave = random.get_valor();
////		try{
////			RecordFrase rec = hash.obtener_registro(clave);
////			cout << "ENCONTRADO: " << clave << " => "<< rec.toString() << endl;
////			rec.setFrase(new Frase("habia una vez un perrito que se llamaba ottito :)"));
////			hash.modificar_registro(rec);
////			hash.obtener_registro(clave);
////			cout << "MODIFICADO: " << clave << " => "<< rec.toString() << endl;
////		}catch(RecordNotFoundException &e){
////			cout << "NO ENCONTRADO: " << clave << " => "<<  e.what() << endl;
////		}
////	}
//
//	return 0;
//}
//
//int testCrearArchivoNormalizado(){
//	DictionaryManager dic(PATH_DICC_INPUT);
//	dic.obtenerCopiaNormalizada(PATH_DICC_NORMALIZADO, PATH_STOPWORDS_INPUT);
//	return 0;
//}
//
//int testIndexarArchivo(){
//	Indexador indexador(PATH_DICC_NORMALIZADO, PATH_DICC_INDEXADO);
//	indexador.indexar_archivo();
//	return 0;
//}
//
//int testSort(){
//	Sort s(PATH_DICC_ORDENADO);
//	s.sort(PATH_DICC_INDEXADO_BIN, DIR_PARTICIONES, DIR_MERGE);
//	return 0;
//}
//
//void testProcesadorConArbolDefault(){
//	ProcesadordeTareas program("", true);
////	program.normalizar_diccionario();
////	program.indexar_diccionario_aleatorio();
////	program.ordenar_diccionario_aleatorio();
////	program.insertar_frase(233, "pepe", "selacome", "el amor tiene *afilo de autor [en virolo causas perdidas");
////	program.insertar_frase(222, "pepe", "selacome", "mas facil bruja .");
////	program.insertar_frase(2722, "pepe", "selacome", "El amor casi siempre analogamente en un trazar y termina en insomnio y espina 3");
//
////	program.reporte_terminos_ordenados();
//	cout << "TASA DE FALLOS" << endl;
//	cout << "==============" << endl;
//	cout << program.estadistica_tasa_de_fallos() << endl;
//
//	cout << "TERMINOS NO ENCONTRADOS" << endl;
//	cout << "=======================" << endl;
//	list<string> no_encontrados = program.lista_terminos_no_encontrados();
//	list<string>::iterator it_no_encontrados;
//
//	for(it_no_encontrados = no_encontrados.begin(); it_no_encontrados != no_encontrados.end(); ++it_no_encontrados){
//		cout << (*it_no_encontrados) << endl;
//	}
//
//	cout << "RANKING TERMINOS POPULARES" << endl;
//	cout << "==========================" << endl;
//	list<AuxiliarEstadisticaRanking> unique_terminos = program.lista_ranking_terminos_populares();
//	list<AuxiliarEstadisticaRanking>::iterator itunique;
//	cout  << "CANTIDAD"<< "\t\t " << "TERMINO" << endl;
//	for(itunique = unique_terminos.begin(); itunique != unique_terminos.end(); ++itunique){
//		cout  << (*itunique).get_cantidad() << "\t\t " << (*itunique).get_termino() << endl;
//	}
//
//
//	cout << "ESTADISTICA TERMINOS PROMEDIO POR FRASE" << endl;
//	cout << "=======================================" << endl;
//	cout << program.estadistica_terminos_promedio_por_frase();
//
////	cout << program.buscar_frase(233) << endl;
////	cout << program.buscar_frase(222) << endl;
////	cout << program.buscar_frase(2722) << endl;
//
//
//
//
//}
//
//
//
//void testSepararFraseEnPalabras(){
//	string frase = "hola (como) estás Cabeza, DE Chorlito";
//	Palabra::separar_cadena(frase);
//}
//
//int main() {
//
////	testCrearArchivoNormalizado();
////	testIndexarArchivo();
////	testSort();
////	testHash();
////	testArbol();
//	testProcesadorConArbolDefault();
////	testSepararFraseEnPalabras();
//
//	return 0;
//}
//
//
